/**
 * 
 */
package ve.com.neometrica.inventario.impl.dao;

import java.util.LinkedList;
import java.util.List;

import org.hibernate.SQLQuery;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

import ve.com.neometrica.inventario.api.dao.ProductoDao;
import ve.com.neometrica.inventario.api.model.Producto;

/**
 * @author a.cabrera
 *
 */
public class ProductoDaoImpl extends HibernateDaoSupport implements ProductoDao {

	/* (non-Javadoc)
	 * @see ve.com.neometrica.inventario.api.dao.ProductoDao#save(ve.com.neometrica.inventario.api.model.Producto)
	 */
	@Override
	public void save(Producto producto) {
		if(producto.getId()==null){
			getHibernateTemplate().save(producto);
		}else{
			getHibernateTemplate().saveOrUpdate(producto);
		}
	}

	/* (non-Javadoc)
	 * @see ve.com.neometrica.inventario.api.dao.ProductoDao#getAll()
	 */
	@Override
	public List<Producto> getAll() {		
		return getHibernateTemplate().loadAll(Producto.class);
	}

	/* (non-Javadoc)
	 * @see ve.com.neometrica.inventario.api.dao.ProductoDao#getById(java.lang.Integer)
	 */
	@Override
	public Producto getById(Integer id) {
		return this.getHibernateTemplate().load(Producto.class, id);
	}
	
	@Override
	public List<Producto> getForCombo() {
		List<Producto> productos=new LinkedList<Producto>();
		SQLQuery q = getSession().createSQLQuery(SELECT_PRODUCTO_COMBO);		
		List<Object>l=q.list();
		for (Object object : l) {
		        Object[] o=(Object[])object;
		        Producto p;
		        try {
		        	p=new Producto(Integer.valueOf(String.valueOf(o[0])),
		        			String.valueOf(o[1]),
		        			String.valueOf(o[2])
		        			);
		        productos.add(p);	
		        }catch (Exception e) {
					// TODO: handle exception
				}
		}
		return productos;
	}

	private static String SELECT_PRODUCTO_COMBO="select p.id,p.nombre,m.nombre \"marca\" from producto p inner join marca m on p.marcaid=m.id";
}